﻿using Huasky.MyWrod.Common;
using Huasky.MyWrod.Common.Util;
using Huasky.MyWrod.Core.Db;

namespace Huasky.MyWrod.Core.BackgroundTask;

/// <summary>
/// 初始化数据库的任务
/// </summary>
public class DbInitializationTask : HuaskyApiTask
{
    protected override Task ExecuteAsync(CancellationToken stoppingToken)
    {
        try
        {
            var seeds = DIHelper.CreateAll<ISeedData>();
            foreach (var seed in seeds)
            {
                var succ = seed.Db.Database.EnsureCreated();
                // 已存在数据库，且需要重新创建时（应该仅在开发环境执行此操作）
                if (!succ && AppConfig.Settings.IsBuild && Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development")
                {
                    seed.Db.Database.EnsureDeleted();
                    LoggerHelper.Info($"----数据库 [{seed.Db.GetType().Name}] 已成功删除----");
                    create(seed);
                }
                else if (succ)      // 不存在数据库
                {
                    create(seed);
                }
            }
        }
        catch (Exception ex)
        {
            LoggerHelper.Error(ex, "数据库初始化操作异常");
        }
        return Task.CompletedTask;
    }

    void create(ISeedData seed)
    {
        seed.Db.Database.EnsureCreated();
        LoggerHelper.Info($"----数据库 [{seed.Db.GetType().Name}] 创建完成----");
        seed.Handle();
        LoggerHelper.Info($"----数据库 [{seed.Db.GetType().Name}] 数据库种子数据创建完成----");
        seed.Dispose();
    }
}
